<?php
/**
 * Created by PhpStorm.
 * User: xy
 * Date: 2017/1/25
 * Time: 下午10:21
 */
//----------分割线------------

/**
 * 文字自动换行算法
 * @param $card 画板
 * @param $pos 数组，top距离画板顶端的距离，fontsize文字的大小，width宽度，left距离左边的距离，hang_size行高
 * @param $str 要写的字符串
 * @param $iswrite  是否输出，ture，  花出文字，false只计算占用的高度
 * @return int 返回整个字符所占用的高度
 */

include('DB.php');
include('util.php');
mb_internal_encoding("UTF-8"); // 设置编码
function draw_txt_to($card, $pos, $str, $iswrite)
{

    $_str_h = $pos["top"];
    $fontsize = $pos["fontsize"];
    $width = $pos["width"];
    $margin_lift = $pos["left"];
    $hang_size = $pos["hang_size"];
    $temp_string = "";
    $font_file = "arial.ttf";
    $tp = 0;

    $font_color = imagecolorallocate($card, $pos["color"][0], $pos["color"][1], $pos["color"][2]);
    for ($i = 0; $i < mb_strlen($str); $i++) {

        $box = imagettfbbox($fontsize, 0, $font_file, $temp_string);
        $_string_length = $box[2] - $box[0];
        $temptext = mb_substr($str, $i, 1);

        $temp = imagettfbbox($fontsize, 0, $font_file, $temptext);

        if ($_string_length + $temp[2] - $temp[0] < $width) {//长度不够，字数不够，需要

            //继续拼接字符串。

            $temp_string .= mb_substr($str, $i, 1);

            if ($i == mb_strlen($str) - 1) {//是不是最后半行。不满一行的情况
                $_str_h += $hang_size;//计算整个文字换行后的高度。
                $tp++;//行数
                if ($iswrite) {//是否需要写入，核心绘制函数
                    imagettftext($card, $fontsize, 0, $margin_lift, $_str_h, $font_color, $font_file, $temp_string);
                }

            }
        } else {//一行的字数够了，长度够了。

//            打印输出，对字符串零时字符串置null
            $texts = mb_substr($str, $i, 1);//零时行的开头第一个字。

//            判断默认第一个字符是不是符号；
            $isfuhao = preg_match("/[\\\\pP]/u", $texts) ? true : false;//一行的开头这个字符，是不是标点符号
            if ($isfuhao) {//如果是标点符号，则添加在第一行的结尾
                $temp_string .= $texts;

//                判断如果是连续两个字符出现，并且两个丢失必须放在句末尾的，单独处理
                $f = mb_substr($str, $i + 1, 1);
                $fh = preg_match("/[\\\\pP]/u", $f) ? true : false;
                if ($fh) {
                    $temp_string .= $f;
                    $i++;
                }

            } else {
                $i--;
            }

            $tmp_str_len = mb_strlen($temp_string);
            $s = mb_substr($temp_string, $tmp_str_len-1, 1);//取零时字符串最后一位字符

            if (is_firstfuhao($s)) {//判断零时字符串的最后一个字符是不是可以放在见面
                //讲最后一个字符用“_”代替。指针前移动一位。重新取被替换的字符。
                $temp_string=rtrim($temp_string,$s);
                $i--;
            }
//            }

//            计算行高，和行数。
            $_str_h += $hang_size;
            $tp++;
            if ($iswrite) {

                imagettftext($card, $fontsize, 0, $margin_lift, $_str_h, $font_color, $font_file, $temp_string);
            }
//           写完了改行，置null该行的临时字符串。
            $temp_string = "";
        }
    }

    return $tp * $hang_size;

}
function is_firstfuhao($str)
{
    $fuhaos = array("\"", "“", "'", "<", "《",);

    return in_array($str, $fuhaos);

}

function addInfo($from,$to,$content,$bgId){
    $myDB=new DB();
    $conKey="O".getRandChar(8);
    $sql="insert into conInfo(fromUser,toUser,content,conKey,bgId,createTime)values('$from','$to','$content','$conKey',$bgId,now())";
    
    $myDB->saveData($sql);
    return $myDB->mydb->lastInsertId();
}


?>